package com.hyt.it.ogt.kq.service.gov.service;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.service.gov.model.dto.PaperFileDTO;
import com.hyt.it.ogt.kq.service.gov.model.entity.Paper;
import com.hyt.it.ogt.kq.service.gov.model.param.PaperDeleteParam;
import com.hyt.it.ogt.kq.service.gov.model.param.PaperParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.PaperVO;
import com.hyt.model.PageParam;

/**
 * <p>
 * 试卷信息表 服务类
 * </p>
 *
 * @author liuq
 * @since 2021-04-27
 */
public interface IPaperService extends IService<Paper> {

	/**
	 * 试卷分页
	 * @param pageParam
	 * @param taskId
	 * @return
	 */
	Page<PaperVO> paperPage(PageParam<PaperVO> pageParam, String taskId);

	/**
	 * 导入试卷
	 * @param file
	 * @param timeSubjectId
	 * @throws Exception
	 */
	void importPaper(MultipartFile file, String taskId, String timeSubjectId) throws Exception;

	/**
	 * 导入授权码
	 * @param file
	 * @param paperId
	 * @throws Exception
	 */
	void importAuthCode(MultipartFile file, String paperId)throws Exception;


	/**
	 * 删除批次试卷
	 * @param paperDeleteParam
	 * @return
	 */
	void deleteByTimeSubject(PaperDeleteParam paperDeleteParam);

	/**
	 * 启用，禁用试卷
	 * @param paperParam
	 */
	void updatePaperStatus(PaperParam paperParam);

	/**
	 * 获取批次试卷信息给考试系统
	 * @param taskCode 考试任务编号
	 * @param roomCode 考场编号
	 * @param timeCode 批次编号
	 * @param paperType 试卷类型
	 * @return 批次试卷信息
	 */
	List<PaperFileDTO> getForExamSystem(String taskCode, String roomCode, String timeCode, Integer paperType);

	/**
	 * 获取批次试卷授权码信息给考试系统
	 * @param taskCode 考试任务编号
	 * @param roomCode 考场编号
	 * @param timeCode 批次编号
	 * @param paperType 试卷类型
	 * @param paperCodes 试卷编号
	 * @return 批次试卷授权码信息
	 */
	List<PaperFileDTO> getPaperAuthorizationCode(String taskCode, String roomCode, String timeCode,
												 Integer paperType, String paperCodes);

	/**
	 * 根据考试任务编号获取OBT考试系统模拟试卷
	 * @param taskCode 考试任务编号
	 * @param paperType 试卷类型
	 * @return OBT考试系统模拟试卷
	 */
	PaperFileDTO getObtMockPaper(String taskCode, Integer paperType);

	/**
	 * 根据考试任务编号获取OBT考试系统模拟试卷授权码
	 * @param taskCode 考试任务编号
	 * @param paperCode 试卷编号
	 * @param paperType 试卷类型
	 * @return OBT考试系统模拟试卷授权码
	 */
	PaperFileDTO getObtMockPaperAuthorizationCode(String taskCode, String paperCode, Integer paperType);

	/**
	 * 根据考试任务id获取试卷信息数据
	 * @param taskId 考试任务id
	 * @return 试卷信息数据
	 */
	List<Paper> listByTaskId(String taskId);

	/**
	 * 获取模拟考卷对象
	 * @param taskId
	 * @return
	 */
	Page<PaperVO> mockPaperPage(PageParam<PaperVO> pageParam, String taskId);

	/**
	 * 删除模拟考试卷
	 * @param paperDeleteParam
	 * @throws Exception
	 */
	void deleteMockPaperByTimeSubject(PaperDeleteParam paperDeleteParam);

	/**
	 * 导入模拟卷
	 * @param file 模拟试卷文件
	 * @param taskId 考试任务id
	 * @param timeSubjectId 批次科目id
	 * @throws Exception 异常
	 */
	void importMockPaper(MultipartFile file, String taskId, String timeSubjectId) throws Exception;
}
